<?php
namespace plugins\address\controller;

// use cmf\controller\ApiBaseController;//引用插件基类
use cmf\controller\PluginRestBaseController; //引用插件基类
use plugins\address\model\AddressModel;
use think\Db;
use think\Request;

class ApiIndexController extends PluginRestBaseController
{
    /**
     * 执行构造
     */
    public function __construct()
    {
        header("content-type:text/html;charset=utf-8");
        parent::__construct();
    }

    /**
     * 获取地址列表
     */
    public function getAddress()
    {
        $address = new AddressModel();

        $list = $address->getAddress();

        return api_json_echo(true, '成功', $list, 200);

    }

    /**
     * 根据地区代码获取下级地区代码
     */
    public function getSubord()
    {
        $data = $this->request->post();

        if (empty($data['cri_code'])) {
            $cri_code = '000000';
        } else {
            $cri_code = $data['cri_code'];
        }

        $address = new AddressModel();

        $list = $address->getSubord($cri_code);

        if (!$list) {
            return api_json_echo(false, '该地区代码无下级', null, 100);
        }

        return api_json_echo(true, '成功', $list, 200);
    }

    /**
     * 根据地区代码获取上级地区代码
     * @param    [str]   cri_code   [地区代码]    (可选)
     * @return   [arr]              [下级地区信息]
     */
    public function getSuperior()
    {
        $param = $this->request->post();

        if (empty($param['cri_code'])) {
            return api_json_echo(false, '参数错误', null, 100);
        }
        
        $cri_code = $param['cri_code'];

        $return   = [];

        $address = new AddressModel();
        $return = $address->findSuperior($cri_code, 0, []);

        return api_json_echo(true, '查询成功', $return, 200);
    }

    /**
     * 获取所有地区信息
     */
    public function getAreainfo()
    {
        $da1 = Db::name('address')->where(['cri_level' => 1, 'status' => 1])->order('cri_sort', 'asc')->select()->toArray();
        $da2 = Db::name('address')->where(['cri_level' => 2, 'status' => 1])->order('cri_sort', 'asc')->select()->toArray();
        $da3 = Db::name('address')->where(['cri_level' => 3, 'status' => 1])->order('cri_sort', 'asc')->select()->toArray();

        foreach ($da1 as $key => $value) {
            $data['province_list'][$value['cri_code']] = $value['cri_name'];
        }
        foreach ($da2 as $key2 => $value2) {
            $data['city_list'][$value2['cri_code']] = $value2['cri_name'];
        }
        foreach ($da3 as $key3 => $value3) {
            $data['county_list'][$value3['cri_code']] = $value3['cri_name'];
        }

        return api_json_echo(true, '查询成功', $data, 200);
    }


    /**
     * 获取城市列表
     */
    public function getCityList()
    {   
        $data = $this->request->post();

        $where = 1;

        if (!empty($data['city_name'])) {
            $where .= " and cri_short_name like '%".$data['city_name']."%'";
        }

        $where .= " and cri_level = 2";
        $where .= " and status = 1";

        $da2 = Db::name('address')->where($where)->order('convert(cri_short_name using gbk)')->select()->toArray();


        $hot = ['上海','北京','广州','深圳','武汉','天津','西安','南京','杭州','成都','重庆','郑州'];

        $da = [];
        $i = 0;
        //根据城市名排序
        foreach ($da2 as $key2 => $value2) {
            $m = $this->getFirstChar($value2['cri_name']);

            $da['city'][$m][$key2]['cri_code'] = $value2['cri_code'];
            $da['city'][$m][$key2]['cri_name'] = $value2['cri_name'];
            $da['city'][$m][$key2]['cri_short_name'] = $value2['cri_short_name'];
            $da['city'][$m][$key2]['a'] = $value2['cri_lng'];
            $da['city'][$m][$key2]['b'] = $value2['cri_lat'];


            $da['city'][$m] = array_merge($da['city'][$m]);

            if (in_array($value2['cri_short_name'],$hot)) {
                $da['hot_city'][$i]['cri_code'] = $value2['cri_code'];
                $da['hot_city'][$i]['cri_name'] = $value2['cri_name'];
                $da['hot_city'][$i]['cri_short_name'] = $value2['cri_short_name'];
                $da['hot_city'][$i]['a'] = $value2['cri_lng'];
                $da['hot_city'][$i]['b'] = $value2['cri_lat'];
                $i++;
            }
        }



        return api_json_echo(true, '查询成功', $da, 200);
    }

    /**
     * 获取地区的拼音首字母
     * @param string $s  地区名
     * @return string 大写字母
     */
    private function getFirstChar($s){ 
        $s0 = mb_substr($s,0,1,'utf-8'); //获取名字的姓 
        if ( $s0 =='亳' ) {
            return 'B';
        }elseif ( $s0 =='衢' ) {
            return 'Q';
        }elseif ( $s0 =='泸' || $s0=='漯' ) {
            return 'L';
        }elseif ( $s0 =='濮' ) {
            return 'P';
        }elseif ( $s0 =='儋' ) {
            return 'D';
        }
        $s = iconv('UTF-8','gb2312', $s0); //将UTF-8转换成GB2312编码 
        if (ord($s0)>128) { //汉字开头，汉字没有以U、V开头的 
            $asc=ord($s{0})*256+ord($s{1})-65536; 
            if($asc>=-20319 and $asc<=-20284)return "A"; 
            if($asc>=-20283 and $asc<=-19776)return "B"; 
            if($asc>=-19775 and $asc<=-19219)return "C"; 
            if($asc>=-19218 and $asc<=-18711)return "D"; 
            if($asc>=-18710 and $asc<=-18527)return "E"; 
            if($asc>=-18526 and $asc<=-18240)return "F"; 
            if($asc>=-18239 and $asc<=-17760)return "G"; 
            if($asc>=-17759 and $asc<=-17248)return "H"; 
            if($asc>=-17247 and $asc<=-17418)return "I"; 
            if($asc>=-17417 and $asc<=-16475)return "J"; 
            if($asc>=-16474 and $asc<=-16213)return "K"; 
            if($asc>=-16212 and $asc<=-15641)return "L"; 
            if($asc>=-15640 and $asc<=-15166)return "M"; 
            if($asc>=-15165 and $asc<=-14923)return "N"; 
            if($asc>=-14922 and $asc<=-14915)return "O"; 
            if($asc>=-14914 and $asc<=-14631)return "P"; 
            if($asc>=-14630 and $asc<=-14150)return "Q"; 
            if($asc>=-14149 and $asc<=-14091)return "R"; 
            if($asc>=-14090 and $asc<=-13319)return "S"; 
            if($asc>=-13318 and $asc<=-12839)return "T"; 
            if($asc>=-12838 and $asc<=-12557)return "W"; 
            if($asc>=-12556 and $asc<=-11848)return "X"; 
            if($asc>=-11847 and $asc<=-11056)return "Y"; 
            if($asc>=-11055 and $asc<=-10247)return "Z"; 
            }
            else if(ord($s)>=48 and ord($s)<=57)
            { //数字开头 
                switch(iconv_substr($s,0,1,'utf-8')){ 
                case 1:return "Y"; 
                case 2:return "E"; 
                case 3:return "S"; 
                case 4:return "S"; 
                case 5:return "W"; 
                case 6:return "L"; 
                case 7:return "Q"; 
                case 8:return "B"; 
                case 9:return "J"; 
                case 0:return "L"; 
            } 
        }
        else if(ord($s)>=65 and ord($s)<=90)
        { //大写英文开头 
            return substr($s,0,1); 
        }
        else if(ord($s)>=97 and ord($s)<=122)
        { //小写英文开头 
            return strtoupper(substr($s,0,1)); 
        } 
        else 
        { 
            return iconv_substr($s0,0,1,'utf-8'); 
            //中英混合的词语，不适合上面的各种情况，因此直接提取首个字符即可 
        } 
    }


}
